﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
using Tecnosop.Dominio;

namespace Tecnosop.WebUI.Models
{
    //public class MedicionViewModels
    //{
    //}

    //public class DetallesMedicionViewModel
    //{
    //    public EQUIPO_EN_CONVENIO EquipoEnConvenio { get; set; }
    //    public IEnumerable<MEDICIONES> Mediciones { get; set; }
    //}

    public class NuevaMedicionColorViewModel
    {
        public int NUMERO_CONVENIO { get; set; }
        public int NUMERO_EQUIPO_EN_CONVENIO { get; set; }

        [DisplayName("Fecha medición")]
        [Required(ErrorMessage = " Ingrese fecha")]
        [Remote("VerificarFechaAnteriorColor", "Medicion", AdditionalFields = "NUMERO_EQUIPO_EN_CONVENIO", ErrorMessage = "La fecha de la medición actual no puede ser antes que la fecha de la medición anterior")]
        public DateTime FECHA_MEDICION_COLOR { get; set; }

        [DisplayName("Contador actual")]
        [Required(ErrorMessage = " Ingrese el estado de contador")]
        [Range(0, Int32.MaxValue, ErrorMessage = "No se permiten valores negativos")]
        [Remote("VerificarContadorAnteriorColor", "Medicion", AdditionalFields = "NUMERO_EQUIPO_EN_CONVENIO", ErrorMessage = "El contador actual no puede ser menor que el contador anterior")]
        public int? CONTADOR_ACTUAL_COLOR { get; set; }
    }

    public class NuevaMedicionBNViewModel
    {
        public int NUMERO_CONVENIO { get; set; }
        public int NUMERO_EQUIPO_EN_CONVENIO { get; set; }

        [DisplayName("Fecha medición")]
        [Required(ErrorMessage = " Ingrese fecha")]
        [Remote("VerificarFechaAnteriorBN", "Medicion", AdditionalFields = "NUMERO_EQUIPO_EN_CONVENIO", ErrorMessage = "La fecha de la medición actual no puede ser antes que la fecha de la medición anterior")]
        public DateTime FECHA_MEDICION_BN { get; set; }

        [DisplayName("Contador actual")]
        [Required(ErrorMessage = " Ingrese el estado de contador")]
        [Range(0, Int32.MaxValue, ErrorMessage = "No se permiten valores negativos")]
        [Remote("VerificarContadorAnteriorBN", "Medicion", AdditionalFields = "NUMERO_EQUIPO_EN_CONVENIO", ErrorMessage = "El contador actual no puede ser menor que el contador anterior")]
        public int? CONTADOR_ACTUAL_BN { get; set; }
    }

    public class BusquedaEquipoEnConvenio
    {
        [DisplayName("Número del convenio")]
        [Required(ErrorMessage = "Debe ingresar el {0} donde se encuentra el equipo")]
        [Remote("ValidaNumeroConvenio", "Medicion", ErrorMessage = "No existe ningún convenio con el número ingresado")]
        public int NUMERO_CONVENIO { get; set; }

        [DisplayName("Número de consignación")]
        [Remote("ValidaConsignacion", "Medicion", ErrorMessage = "No existe ninguna consignación con el número ingresado")]
        public int? CONSIGNACION { get; set; }

        [DisplayName("Número de serie")]
        [Remote("ValidaNumeroSerie", "Medicion", ErrorMessage = "No existe ningún equipo consignado con el número de serie ingresado")]
        public string NUMERO_DE_SERIE { get; set; }
    }

    public class BusquedaMedicionViewModel
    {
        [Required(ErrorMessage = "Debe ingresar algún término para la búsqueda")]
        [Remote("ValidaBusquedaVacia", "Medicion", AdditionalFields = "Criterios", ErrorMessage = "No se encontraron resultados.")]
        public string AreaBusqueda { get; set; }

        [DisplayName("Criterios de búsqueda")]
        [UIHint("Enum")]
        [DataType("Criterios")]
        public CriteriosDeBusquedaMedicion Criterios { get; set; }
    }

    public class ResultadoBusquedaMedicionViewModel
    {
        public IEnumerable<MEDICIONES> Resultado { get; set; }
        public string CriterioParaOrdenar { get; set; }
    }

    public enum CriteriosDeBusquedaMedicion
    {
        [Description("Número de medición")]
        ID,
        [Description("Número de convenio")]
        Convenio,
        [Description("Consignación de un equipo")]
        Consignacion,
        [Description("Número de serie de un equipo")]
        Serie
    }
}